[iOS] URLRequestのheaderに小文字のauthorizationを設定しても大文字に置き換えられてしまう
こんにちは。きんくまです。
今回はタイトルの通りでして、
「URLRequestのheaderに小文字のauthorizationを設定しても大文字に置き換えられてしまう」です。
検証コード
HTTPヘッダーに小文字からはじまるauthorizationと、適当なx-custom-keyというのを設定します。
private func makeRequest() -> AnyPublisher<[Todo], Error>? { guard let url = URL(string: "https://jsonplaceholder.typicode.com/todos/") else { return nil } var req = URLRequest(url: url) req.addValue("abcdefg", forHTTPHeaderField: "authorization") req.addValue("12345", forHTTPHeaderField: "x-custom-key") if let header = req.allHTTPHeaderFields { print("\(header)") //=> 出力 } return URLSession.shared.dataTaskPublisher(for: req) .tryMap { (data, response) -> Data in guard let httpRes = response as? HTTPURLResponse, 200 ..< 300 ~= httpRes.statusCode else { throw TodoError.invalidHttpStatusCode } return data } .decode(type: [Todo].self, decoder: JSONDecoder()) .eraseToAnyPublisher() }
出力です。小文字設定のauthorizationは大文字始まりのAuthorizationに変更されるが、
x-custom-keyの方はそのままになっていることが確認できます。
["x-custom-key": "12345", "Authorization": "abcdefg"]
対応方法
いろいろ探したのですがなさそうです、、。残念
経緯
HTTP/2だと小文字のみ受け付けるという制限があり、Alamofireで小文字始まりでHTTPヘッダーを設定したところ、サーバーにはじかれましたw
参考
HTTP/1.x⇒HTTP/2 仕様変更で困ったこと (利用暗号の制約・httpヘッダーの小文字化)
Alamofireで何かやっているのかな?と思ったのですが、URLRequestがやってました。OSレベルでやっていたらどうしようもないですね。
How to send apikey
in header in Alamofire 4.5,Swift 4?
ではでは